Breakが付いたUnitySublimeSocketAsset 0.6.1
概要
予定していた、ゲーム内パラメータをエディタで見る機能と、
Break(特定行でゲーム中断)という機能が、試験的に実装できた。
ホントホント。エイプリルフールだけど。
・ゲーム中のその瞬間のパラメータが見れる
Debug.Log("L行番号:ファイル名: ほか
Logの延長上で、ゲーム実行中の値が、エディタから見れるようになった。
・ゲーム中に特定の箇所でBreakが出来る
Debug.Log("B行番号:ファイル名: ほか
やはりLogの延長上で、特定Logが再生された瞬間、
無理矢理フォーカスをUnityから別アプリ(SublimeTextとか)へと移動する事で、
ゲームの挙動を停止させる。
その時の値も見れる。
ムービー
どうやってるのか
Unityで実行するLogに対して、特定フォーマットのものが発生したら、
UnitySublimeSocketがSublimeSocketへとデータ転送
→SublimeSocketが反応、値を保持
という事をしてるだけ。
設定には、SublimeSocketのAPIを使って、
->defineFilter:
{
"name": "unity",
"patterns": [
{
"(.*)[(]([0-9].*?),.*[)]: error .*:(.*)": {
"selectors": [
{
"showAtLog": {
"message": "groups[0]"
}
},
{
"appendRegion": {
"line": "groups[2]",
"message": "\"groups[3]\"",
"view": "groups[1]",
"condition": "keyword"
}
}
]
}
},
(中略)
{
"^L([0-9].*):(.*): (.*)": {
"selectors": [
{
"appendRegion": {
"line": "groups[1]",
"message": "groups[3]",
"view": "groups[2]",
"condition": "string"
}
}
]
}
},
{
"^B([0-9].*):(.*): (.*)": {
"selectors": [
{
"showStatusMessage": {
"message": "groups[2] break. line:groups[1], groups[3]"
}
},
{
"showAtLog": {
"message": "groups[2] break. line:groups[1], groups[3]"
}
},
{
"appendRegion": {
"line": "groups[1]",
"message": "groups[3]",
"view": "groups[2]",
"condition": "string"
}
},
{
"monocastMessage": {
"target": "unitysocket",
"message": "break"
}
}
]
}
}
]
}
正規表現に対して、特定のAPIを着火するようにしかけてあるだけ。
いやーAPIつくって良かったわー。
だいたいのことがカスタマイズできる。
思いつきで挙動変えられる。
まだ本決まりでないBreak
理屈は恐ろしく下らないものなので、お判りの通り、これは正しいBreakではない。
大体、Breakっつったら順に実行できたりしないとつまらないだろう。
今後、気が向いたらなんとかすると思う。
具体的にはコレ用のライブラリを書いて、Asset側で停止や次へ、を扱う。
行単位実行は、、たぶんやらない。行単位でBreak置いてください的な。
目指しているもの
本来、SublimeSocketは、Unity用では無く、Scalaとかをサーバサイドでコンパイルして、
そのコンパイル中継やパラメータの流れをクライアント=SublimeText側で受けることを目的としたものだった。
ライブコンパイル用のBufferも、WebSocketを基礎にした設計もその辺が根源にある。
なので、本来の用途じゃないけど、
なかなか、Unityとの連携は面白いなーと思っているところ。
で
そろそろAssetStoreに出す。出したい。誰かデバッグしてくれる人、追加で募集中。
関係ないけど
SublimeTextの設計思想、メイン機構はC++、プラグインはPythonで、っていうのが、
ほんともう素晴らしい。
プラグインはコンパイル無しの言語でサクサク書き、信頼が必要だったり頑強さが求められる部分や、テストは静的解析とかコンパイルできる言語で書くと
ほんとに良いと思う。
静的だけだとめんどい。 他に得に不満は無い。Scalaとか高機能な言語を使えば良い。
動的だけだとバグる。 テストの量がネックになる。 いつでも型を気にしないといけない。
この組み合わせは、とてもいい。
いやー捗るわー。
あっほら、4/1だから、アジだよ。